From: kaf24@localhost.localdomain Date: Sun, 31 Dec 2006 12:26:42 +0000 (+0000) Subject: [HVM] Change VCPU->LAPIC_ID mapping so that VCPU0 has ID0. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15422^2~112 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c21d85bf593e10156bc19255c4e10ccfa00b5fcb;p=xen.git [HVM] Change VCPU->LAPIC_ID mapping so that VCPU0 has ID0. This fixes booting of older x86/64 Linux kernels. Signed-off-by: Keir Fraser --- diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c index 32d269d213..3890bc3166 100644 --- a/tools/firmware/hvmloader/acpi/build.c +++ b/tools/firmware/hvmloader/acpi/build.c @@ -110,7 +110,7 @@ int construct_madt(struct acpi_20_madt *madt) memset(lapic, 0, sizeof(*lapic)); lapic->type = ACPI_PROCESSOR_LOCAL_APIC; lapic->length = sizeof(*lapic); - lapic->acpi_processor_id = lapic->apic_id = i + 1; + lapic->acpi_processor_id = lapic->apic_id = LAPIC_ID(i); lapic->flags = ACPI_LOCAL_APIC_ENABLED; offset += sizeof(*lapic); lapic++; diff --git a/tools/firmware/hvmloader/config.h b/tools/firmware/hvmloader/config.h index 18d906c4eb..2b21c74539 100644 --- a/tools/firmware/hvmloader/config.h +++ b/tools/firmware/hvmloader/config.h @@ -2,10 +2,11 @@ #define __HVMLOADER_CONFIG_H__ #define IOAPIC_BASE_ADDRESS 0xfec00000 -#define IOAPIC_ID 0x00 +#define IOAPIC_ID 0x01 #define IOAPIC_VERSION 0x11 #define LAPIC_BASE_ADDRESS 0xfee00000 +#define LAPIC_ID(vcpu_id) ((vcpu_id) * 2) #define PCI_ISA_DEVFN 0x08 /* dev 1, fn 0 */ #define PCI_ISA_IRQ_MASK 0x0c60U /* ISA IRQs 5,6,10,11 are PCI connected */ diff --git a/tools/firmware/hvmloader/mp_tables.c b/tools/firmware/hvmloader/mp_tables.c index 3286e2b24d..3b0edb3c9b 100644 --- a/tools/firmware/hvmloader/mp_tables.c +++ b/tools/firmware/hvmloader/mp_tables.c @@ -222,7 +222,7 @@ void fill_mp_config_table(struct mp_config_table *mpct, int length) void fill_mp_proc_entry(struct mp_proc_entry *mppe, int vcpu_id) { mppe->type = ENTRY_TYPE_PROCESSOR; - mppe->lapic_id = vcpu_id + 1; + mppe->lapic_id = LAPIC_ID(vcpu_id); mppe->lapic_version = 0x11; mppe->cpu_flags = CPU_FLAG_ENABLED; if ( vcpu_id == 0 ) diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 2280d946bb..b1b42650f4 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -767,7 +767,7 @@ static int vlapic_reset(struct vlapic *vlapic) struct vcpu *v = vlapic_vcpu(vlapic); int i; - vlapic_set_reg(vlapic, APIC_ID, (v->vcpu_id + 1) << 24); + vlapic_set_reg(vlapic, APIC_ID, (v->vcpu_id * 2) << 24); vlapic_set_reg(vlapic, APIC_LVR, VLAPIC_VERSION); for ( i = 0; i < 8; i++ )